package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	var reader io.Reader //MARK 表示从数据流的末尾进行读取。 有许多实现 包括文件、网络连接、压缩和加密等等
	reader = strings.NewReader("Hello, Reader!")

	var s []byte //MARK 一个空切片
	for i := 1; ; i++ {

		b := make([]byte, 6)

		fmt.Printf("===========%v=============\n", i)

		//MARK 读到b切片里面, 返回:读到多少个,错误
		n, err := reader.Read(b)
		fmt.Printf("n = %v err = %v \nb = %v\n", n, err, b)
		fmt.Printf("b len %v cap %v\n", len(b), cap(b))
		fmt.Printf("b[:n] = %q\n", b[:n]) //MARK %q   单引号围绕的字符字面值，由Go语法安全地转义

		if err == io.EOF || n == 0 {
			break
		}
		//MARK b[:n] 这样拿到实际有值的部分
		s = append(s, b[:n]...) //MARK 传切片去不定数量(可变参数)入参
	}
	fmt.Printf("========================all!!!:  %q===========================\n", s)
}
